/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BussinesLogic;

import BussinesLogic.newpackage.enums.PlanEnum;
import EntidadesCM.CuentaCM;
import EntidadesCM.PlanCM;
import Entities.Plan;
import controller.PlanJpaController;
import controller.exceptions.NonexistentEntityException;
import controller.exceptions.PreexistingEntityException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.util.Calendar;

/**
 *
 * @author Nas
 */
public class PlanBL implements Serializable {

    PlanJpaController planJpaController;

    public void crearPlan(PlanCM planCM) throws PreexistingEntityException, Exception {
    }

    public void editarPlan(PlanCM planCM) throws NonexistentEntityException, Exception {
    }

    public void eliminarPlan(Integer id) throws NonexistentEntityException {
    }

    public List<PlanCM> buscarAllPlan() {
        List<PlanCM> planesCM = new ArrayList<>();
        planJpaController = new PlanJpaController();
        PlanCM planCM;

        for (Plan plan : planJpaController.findPlanEntities()) {
            planCM = new PlanCM();
            planCM.setIdPlan(plan.getIdPlan());
            planCM.setNombre(plan.getNombre());
            planCM.setDescripcion(plan.getDescripcion());
            planCM.setEstado(plan.getEstado());

            planesCM.add(planCM);
        }
        return planesCM;
    }

    public PlanCM buscarPlanById(Integer id) {
        PlanCM planCM = new PlanCM();
        Plan plan;
        planJpaController = new PlanJpaController();
        plan = planJpaController.findPlan(id);
        if (plan != null) {
            planCM = new PlanCM();
            planCM.setIdPlan(plan.getIdPlan());
            planCM.setNombre(plan.getNombre());
            planCM.setDescripcion(plan.getDescripcion());
            planCM.setEstado(plan.getEstado());
        }
        return planCM;
    }

    public PlanCM convertirPlanCM(Plan plan) {
        PlanCM planCM = new PlanCM();
        if (plan != null) {
            planCM = new PlanCM();
            planCM.setIdPlan(plan.getIdPlan());
            planCM.setNombre(plan.getNombre());
            planCM.setDescripcion(plan.getDescripcion());
            planCM.setEstado(plan.getEstado());
        }
        return planCM;
    }

    public List<CuentaCM> validarPlan(Integer id, Integer idAfiliado) {
        List<CuentaCM> cuentasCM = new ArrayList<>();
        CuentaBL cuentaBL = new CuentaBL();
        if (id == 3) {
            cuentasCM = cuentaBL.buscarAllCuentasByAfiliado(idAfiliado);
            if (cuentasCM != null) {
                return cuentasCM;
            } 
        }
        return null;
    }
    public Date calcularFinPlan(Date fechaInicial, Integer idPlan){
        //Anual = 1
        //Trimestral = 2
        Calendar c = Calendar.getInstance();
        c.setTime(fechaInicial);
        
        if(idPlan == 1){
            c.add(Calendar.YEAR, PlanEnum.ANUAL.getValue());
        }else if(idPlan == PlanEnum.TRIMESTRAL.getValue()){
         c.add(Calendar.MONTH, 3);   
        }  
        return c.getTime();
    }
}
